import Request from '../utils/http/index'
import useStore from "../store";
import { flux } from '../utils/flux'

const $http = new Request({})

// 当前接口请求数
let requestNum = 0
// 请求开始拦截器
$http.requestStart = function (options) {
  if (options.load) {
    if (requestNum <= 0) {
      // 打开加载动画
      // wx.showLoading({ title: 'Loading...', mask: true })
    }
    requestNum += 1
  }

  const { userStore } = useStore()

  options.header.token = userStore.token
  return options // return false 表示请求拦截，不会继续请求
}

$http.requestEnd = function (options) {
  // 判断当前接口是否需要加载动画
  if (options.load) {
    requestNum = requestNum - 1
    if (requestNum <= 0) {
      // wx.hideLoading()
    }
  }
}

$http.dataFactory = async function (res) {
  // console.log('接口请求数据', {
  //   url: res.url,
  //   resolve: res.response,
  //   header: res.header,
  //   data: res.data,
  //   method: res.method
  // })
  if (res.response.statusCode && res.response.statusCode === 200) {
    let httpData = res.response.data
    if (typeof httpData === 'string') {
      httpData = JSON.parse(httpData)
    }
    if (httpData.errCode === 0) {
      return flux.resolve(httpData.data)
    } else if (httpData.errCode === 600 || httpData.errCode === 603 || httpData.errCode === 602) {
      return redirectJump(res)
    }
    console.error('【errCode异常：】', httpData.errCode, httpData.message)
    return flux.reject(httpData)
  }
  // 返回错误的结果(catch接受数据)
  if (res.response.data.errCode === 600 || res.response.data.errCode === 603 || res.response.data.errCode === 602) {
    /**
     * 603 token过期
     * 600 帐号在其他设备登录
     * 602 用户未登录
     */
    return redirectJump(res)
  }
  console.error('【接口-未知错误：】', res)
  return flux.reject('未知错误')
}
// 错误回调
$http.requestError = function (res) {
  // e.statusCode === 0 是参数效验错误抛出的
  if (typeof res === 'object' && res.statusCode === 0) {
    return flux.reject(res.errMsg)
  }
  return flux.reject('系统错误')
}

function redirectJump(res) {
  // const { userStore, systemStore } = useStore()
  console.error('【token 过期：】', res.response.data.errCode, res.response.data.message)

  // if (systemStore.isH5 && systemStore.isDev) {
  //   // H5本调开发不跳
  //   if (window.location.port === '8081') {
  //     // return uni.flux.reject(res.response.data.message)
  //   }
  // }
  // // 只跳一次
  // if (userStore.tokenExpire) return
  // userStore.setTokenExpire(true)

  // const fullPath = util.getCurrentPageFullPath()
  // userStore.setFullPath(fullPath)
  // uni.reLaunch({ url: '/pages/index/index' })
  // return flux.reject(res.response.data.message)
}

export default $http
